import 'package:auto_size_text/auto_size_text.dart';

import 'package:flutter/material.dart';

/// 自动缩放大小的文本组件
/// 支持限制最大/小 字体大小
class NttAutoSizeText extends StatelessWidget {
  /// 文本
  final String text;

  /// 文本样式
  final TextStyle? style;

  /// 文本大小 优先使用 style 属性
  final double? fontSize;

  /// 文本颜色 优先使用 style 属性
  final Color? textColor;

  /// 文本对齐方式
  final TextAlign? textAlign;

  /// 最大字体大小
  final double maxFontSize;

  /// 最小字体大小
  final double minFontSize;

  /// 是否自动换行
  final bool? softWrap;

  /// 最大行数
  final int? maxLines;

  /// 文本溢出时处理方式
  final TextOverflow? overflow;

  const NttAutoSizeText(
    this.text, {
    super.key,
    this.style,
    this.textAlign,
    this.maxFontSize = double.infinity,
    this.minFontSize = 12,
    this.softWrap,
    this.maxLines,
    this.fontSize,
    this.textColor,
    this.overflow,
  });

  /// 如未设置 style 则使用该默认样式
  TextStyle get _defaultStyle {
    return TextStyle(
      fontSize: fontSize ?? 15,
      color: textColor ?? Colors.black87,
    );
  }

  @override
  Widget build(BuildContext context) {
    return AutoSizeText(
      text,
      style: style ?? _defaultStyle,
      textAlign: textAlign,
      maxFontSize: maxFontSize != double.infinity
          ? maxFontSize.toInt().toDouble()
          : maxFontSize,
      minFontSize: minFontSize.toInt().toDouble(),
      softWrap: softWrap,
      maxLines: maxLines,
      overflow: overflow,
    );
  }
}
